/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package broad.dao;

/**
 *
 * @author Rafael
 */


import broad.bean.Pessoa;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;


public class DAOPessoa extends DAOGenerics <Pessoa, Integer> {


    @Override
    public Pessoa buscar(Integer obj) {

        SessionFactory sf = new AnnotationConfiguration().configure().buildSessionFactory();
        Session s = sf.openSession();

        try {
            return buscar(obj, s);

        } finally {
            s.close();
        }

    }


    @Override
    public Pessoa buscar(Integer obj, Session s) {

        String sql = "from Pessoa where idPessoa = :id";

        Query qr = s.createQuery(sql);
        qr.setParameter("id", obj);

        return (Pessoa) qr.uniqueResult();
    }



    @Override
    public List<Pessoa> buscarTodos() {

        SessionFactory sf = new AnnotationConfiguration().configure().buildSessionFactory();
        Session s = sf.openSession();

        try {
            List<Pessoa> lista = buscarTodos(s);
            for (Pessoa pessoa : lista) {
            }
            return lista;

        } finally {
            s.close();
        }
    }



    @Override
    public List<Pessoa> buscarTodos(Session s) {

        String sql = "from Pessoa";

        Query qr = s.createQuery(sql);

        return (List<Pessoa>) qr.list();
    }

    public boolean existeCpf(String cpf) {

        SessionFactory sf = new AnnotationConfiguration().configure().buildSessionFactory();
        Session s = sf.openSession();

        try {

            String hql = "from Pessoa p where p.cpf = :busca";
            Query qr = s.createQuery(hql);
            qr.setParameter("busca", cpf);

            if (qr.list().isEmpty()) {
                return false;
            } else {
                return true;
            }

        } finally {
            s.close();
        }
    }

    public List<Pessoa> buscarPorCpf(String cpf){

        SessionFactory sf = new AnnotationConfiguration().configure().buildSessionFactory();
        Session s = sf.openSession();

        try {
            List<Pessoa> lista = buscarPorCpf(cpf, s);
            for (Pessoa pessoa : lista) {

            }
            return lista;


        } finally {
            s.close();
        }

    }


    public List<Pessoa> buscarPorCpf(String cpf, Session s) {

            String hql = "from Pessoa p where p.cpf = :busca";
            Query qr = s.createQuery(hql);
            qr.setParameter("busca", cpf);

            return (List<Pessoa>) qr.list();

    }

    public List<Pessoa> buscarPorNome(String nome){

        SessionFactory sf = new AnnotationConfiguration().configure().buildSessionFactory();
        Session s = sf.openSession();

        try {
            List<Pessoa> lista = buscarPorNome(nome, s);
            for (Pessoa pessoa : lista) {

            }
            return lista;

        } finally {
            s.close();
        }

    }


    public List<Pessoa> buscarPorNome(String nome, Session s){

        String hql = "from Pessoa p where p.nome like :busca";

        Query qr = s.createQuery(hql);
        qr.setParameter("busca", nome + "%");


        return (List<Pessoa>) qr.list();
    }
    
}

